﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using acessaDB;
using Frame;
using System.Data;
using System.Configuration;
using FirebirdSql.Data.FirebirdClient;
using Estrutura;


namespace Banco
{

    public class BD_Unidade_medida
    {
        #region variaveis_globais

        acessaDB.conectaDBFireBird fireBird = new conectaDBFireBird();
        string conectionString = System.Configuration.ConfigurationManager.AppSettings["FireBirdConnectionLocal"];
        string usuario = string.Empty;

        #endregion

        #region construtor

        public BD_Unidade_medida()
        {
            if (System.Configuration.ConfigurationManager.AppSettings["ambiente"] == "PROD")
                conectionString = System.Configuration.ConfigurationManager.AppSettings["FireBirdConnectionProd"];
        }
        public BD_Unidade_medida(string usu_Login)
        {
            if (System.Configuration.ConfigurationManager.AppSettings["ambiente"] == "PROD")
                conectionString = System.Configuration.ConfigurationManager.AppSettings["FireBirdConnectionProd"];
            usuario = usu_Login;
        }

        #endregion

        #region metodos

        public DataSet _retorna_Unidade_medida(
                                                string CTM_UNIDADE_MEDIDA_ID,
                                                string CMU_TIPO_UNIDADE,
                                                string CMU_TIPO_CALCULO,
                                                string CMU_DESCRICAO,
                                                string USU_INSERT,
                                                string DATA_INSERT,
                                                string USU_UPDATE,
                                                string DATA_UPDATE
                                                )
        {

            if (string.IsNullOrEmpty(CTM_UNIDADE_MEDIDA_ID)) CTM_UNIDADE_MEDIDA_ID = "'0'";
            if (string.IsNullOrEmpty(CMU_TIPO_UNIDADE)) CMU_TIPO_UNIDADE = "''";
            if (string.IsNullOrEmpty(CMU_TIPO_CALCULO)) CMU_TIPO_CALCULO = "''";
            if (string.IsNullOrEmpty(CMU_DESCRICAO)) CMU_DESCRICAO = "''";
            if (string.IsNullOrEmpty(USU_INSERT)) USU_INSERT = "'0'";
            if (string.IsNullOrEmpty(DATA_INSERT)) DATA_INSERT = "''";
            if (string.IsNullOrEmpty(USU_UPDATE)) USU_UPDATE = "'0'";
            if (string.IsNullOrEmpty(DATA_UPDATE)) DATA_UPDATE = "''";

            string sql = "SELECT " +
                                  "CTM_UNIDADE_MEDIDA.CTM_UNIDADE_MEDIDA_ID, " +
                                  "CTM_UNIDADE_MEDIDA.CMU_TIPO_UNIDADE, " +
                                  "CTM_UNIDADE_MEDIDA.CMU_TIPO_CALCULO, " +
                                  "CTM_UNIDADE_MEDIDA.CMU_DESCRICAO, " +
                                  "CTM_UNIDADE_MEDIDA.USU_INSERT, " +
                                  "CTM_UNIDADE_MEDIDA.DATA_INSERT, " +
                                  "CTM_UNIDADE_MEDIDA.USU_UPDATE, " +
                                  "CTM_UNIDADE_MEDIDA.DATA_UPDATE " +
                            "FROM CTM_UNIDADE_MEDIDA " +
                            //"LEFT JOIN USUARIO ON USUARIO.USUARIO_ID = CTM_UNIDADE_MEDIDA.USUARIO_ID " +
                            //"LEFT JOIN USUARIO ON USUARIO.USUARIO_ID = CTM_UNIDADE_MEDIDA.USUARIO_ID " +
                            "WHERE " +
                            "      (CTM_UNIDADE_MEDIDA.CTM_UNIDADE_MEDIDA_ID           = " + CTM_UNIDADE_MEDIDA_ID + "  OR " + CTM_UNIDADE_MEDIDA_ID + " = '0') AND " +
                            "      (CTM_UNIDADE_MEDIDA.CMU_TIPO_UNIDADE                = " + CMU_TIPO_UNIDADE + "  OR " + CMU_TIPO_UNIDADE + " = '') AND " +
                            "      (CTM_UNIDADE_MEDIDA.CMU_TIPO_CALCULO                = " + CMU_TIPO_CALCULO + "  OR " + CMU_TIPO_CALCULO + " = '') AND " +
                            "      (CTM_UNIDADE_MEDIDA.CMU_DESCRICAO                   = " + CMU_DESCRICAO + "  OR " + CMU_DESCRICAO + " = '') AND " +
                            "      (CTM_UNIDADE_MEDIDA.USU_INSERT                      = " + USU_INSERT + "  OR " + USU_INSERT + " = '0') AND " +
                            "      (CTM_UNIDADE_MEDIDA.DATA_INSERT                     = " + DATA_INSERT + "  OR " + DATA_INSERT + " = '') AND " +
                            "      (CTM_UNIDADE_MEDIDA.USU_UPDATE                      = " + USU_UPDATE + "  OR " + USU_UPDATE + " = '0') AND " +
                            "      (CTM_UNIDADE_MEDIDA.DATA_UPDATE                     = " + DATA_UPDATE + "  OR " + DATA_UPDATE + " = '') ";

            DataSet dsRetorno = fireBird.retornaDataSet(sql, conectionString);
            return dsRetorno;

        }


        public List<ES_Unidade_medida> _obter_Unidade_medida(
                                                string CTM_UNIDADE_MEDIDA_ID,
                                                string CMU_TIPO_UNIDADE,
                                                string CMU_TIPO_CALCULO,
                                                string CMU_DESCRICAO,
                                                string USU_INSERT,
                                                string DATA_INSERT,
                                                string USU_UPDATE,
                                                string DATA_UPDATE
                                                )
        {

            if (string.IsNullOrEmpty(CTM_UNIDADE_MEDIDA_ID)) CTM_UNIDADE_MEDIDA_ID = "'0'";
            if (string.IsNullOrEmpty(CMU_TIPO_UNIDADE)) CMU_TIPO_UNIDADE = "''";
            if (string.IsNullOrEmpty(CMU_TIPO_CALCULO)) CMU_TIPO_CALCULO = "''";
            if (string.IsNullOrEmpty(CMU_DESCRICAO)) CMU_DESCRICAO = "''";
            if (string.IsNullOrEmpty(USU_INSERT)) USU_INSERT = "'0'";
            if (string.IsNullOrEmpty(DATA_INSERT)) DATA_INSERT = "''";
            if (string.IsNullOrEmpty(USU_UPDATE)) USU_UPDATE = "'0'";
            if (string.IsNullOrEmpty(DATA_UPDATE)) DATA_UPDATE = "''";

            string sql = "SELECT " +
                                  "CTM_UNIDADE_MEDIDA.CTM_UNIDADE_MEDIDA_ID, " +
                                  "CTM_UNIDADE_MEDIDA.CMU_TIPO_UNIDADE, " +
                                  "CTM_UNIDADE_MEDIDA.CMU_TIPO_CALCULO, " +
                                  "CTM_UNIDADE_MEDIDA.CMU_DESCRICAO, " +
                                  "CTM_UNIDADE_MEDIDA.USU_INSERT, " +
                                  "CTM_UNIDADE_MEDIDA.DATA_INSERT, " +
                                  "CTM_UNIDADE_MEDIDA.USU_UPDATE, " +
                                  "CTM_UNIDADE_MEDIDA.DATA_UPDATE " +
                            "FROM CTM_UNIDADE_MEDIDA " +
                //"LEFT JOIN USUARIO ON USUARIO.USUARIO_ID = CTM_UNIDADE_MEDIDA.USUARIO_ID " +
                //"LEFT JOIN USUARIO ON USUARIO.USUARIO_ID = CTM_UNIDADE_MEDIDA.USUARIO_ID " +
                            "WHERE " +
                            "      (CTM_UNIDADE_MEDIDA.CTM_UNIDADE_MEDIDA_ID           = " + CTM_UNIDADE_MEDIDA_ID + "  OR " + CTM_UNIDADE_MEDIDA_ID + " = '0') AND " +
                            "      (CTM_UNIDADE_MEDIDA.CMU_TIPO_UNIDADE                = " + CMU_TIPO_UNIDADE + "  OR " + CMU_TIPO_UNIDADE + " = '') AND " +
                            "      (CTM_UNIDADE_MEDIDA.CMU_TIPO_CALCULO                = " + CMU_TIPO_CALCULO + "  OR " + CMU_TIPO_CALCULO + " = '') AND " +
                            "      (CTM_UNIDADE_MEDIDA.CMU_DESCRICAO                   = " + CMU_DESCRICAO + "  OR " + CMU_DESCRICAO + " = '') "+
                            //"      (CTM_UNIDADE_MEDIDA.USU_INSERT                      = " + USU_INSERT + "  OR " + USU_INSERT + " = '0') AND " +
                            //"      (CTM_UNIDADE_MEDIDA.DATA_INSERT                     = " + DATA_INSERT + "  OR " + DATA_INSERT + " = '') AND " +
                            //"      (CTM_UNIDADE_MEDIDA.USU_UPDATE                      = " + USU_UPDATE + "  OR " + USU_UPDATE + " = '0') AND " +
                            //"      (CTM_UNIDADE_MEDIDA.DATA_UPDATE                     = " + DATA_UPDATE + "  OR " + DATA_UPDATE + " = '') ";
                            " ORDER BY CTM_UNIDADE_MEDIDA.CMU_DESCRICAO ";

            List<ES_Unidade_medida> lista = new List<ES_Unidade_medida>();
            FbConnection fbConexao = new FbConnection(conectionString);
            FbDataReader dr = fireBird.retornaDataReader(sql, conectionString, fbConexao);
            try
            {
                while (dr.Read())
                {
                    ES_Unidade_medida item = new ES_Unidade_medida();
                    item.CTM_UNIDADE_MEDIDA_ID = dr["CTM_UNIDADE_MEDIDA_ID"].ToString();
                    item.CMU_TIPO_UNIDADE = dr["CMU_TIPO_UNIDADE"].ToString();
                    item.CMU_TIPO_CALCULO = dr["CMU_TIPO_CALCULO"].ToString();
                    item.CMU_DESCRICAO = dr["CMU_DESCRICAO"].ToString();
                    item.USU_INSERT = dr["USU_INSERT"].ToString();
                    item.DATA_INSERT = dr["DATA_INSERT"].ToString();
                    item.USU_UPDATE = dr["USU_UPDATE"].ToString();
                    item.DATA_UPDATE = dr["DATA_UPDATE"].ToString();
                    lista.Add(item);

                }
                return lista;
            }
            finally
            {
                fireBird.fecharConexao(fbConexao);
            }
        }


        public ES_Unidade_medida _obter_Unidade_medida_by_id(
                                                string CTM_UNIDADE_MEDIDA_ID
                                                )
        {

            if (string.IsNullOrEmpty(CTM_UNIDADE_MEDIDA_ID)) CTM_UNIDADE_MEDIDA_ID = "'0'";

            string sql = "SELECT " +
                                  "CTM_UNIDADE_MEDIDA.CTM_UNIDADE_MEDIDA_ID, " +
                                  "CTM_UNIDADE_MEDIDA.CMU_TIPO_UNIDADE, " +
                                  "CTM_UNIDADE_MEDIDA.CMU_TIPO_CALCULO, " +
                                  "CTM_UNIDADE_MEDIDA.CMU_DESCRICAO, " +
                                  "CTM_UNIDADE_MEDIDA.USU_INSERT, " +
                                  "CTM_UNIDADE_MEDIDA.DATA_INSERT, " +
                                  "CTM_UNIDADE_MEDIDA.USU_UPDATE, " +
                                  "CTM_UNIDADE_MEDIDA.DATA_UPDATE " +
                            "FROM CTM_UNIDADE_MEDIDA " +
                            //"LEFT JOIN USUARIO ON USUARIO.USUARIO_ID = CTM_UNIDADE_MEDIDA.USUARIO_ID " +
                            //"LEFT JOIN USUARIO ON USUARIO.USUARIO_ID = CTM_UNIDADE_MEDIDA.USUARIO_ID " +
                            "WHERE " +
                            "      (CTM_UNIDADE_MEDIDA.CTM_UNIDADE_MEDIDA_ID = " + CTM_UNIDADE_MEDIDA_ID + "  OR " + CTM_UNIDADE_MEDIDA_ID + " = '0') ";

            ES_Unidade_medida item = new ES_Unidade_medida();
            FbConnection fbConexao = new FbConnection(conectionString);
            FbDataReader dr = fireBird.retornaDataReader(sql, conectionString, fbConexao);
            try
            {
                while (dr.Read())
                {
                    item.CTM_UNIDADE_MEDIDA_ID = dr["CTM_UNIDADE_MEDIDA_ID"].ToString();
                    item.CMU_TIPO_UNIDADE = dr["CMU_TIPO_UNIDADE"].ToString();
                    item.CMU_TIPO_CALCULO = dr["CMU_TIPO_CALCULO"].ToString();
                    item.CMU_DESCRICAO = dr["CMU_DESCRICAO"].ToString();
                    item.USU_INSERT = dr["USU_INSERT"].ToString();
                    item.DATA_INSERT = dr["DATA_INSERT"].ToString();
                    item.USU_UPDATE = dr["USU_UPDATE"].ToString();
                    item.DATA_UPDATE = dr["DATA_UPDATE"].ToString();

                }
                return item;
            }
            finally
            {
                fireBird.fecharConexao(fbConexao);
            }
        }


        public void _inserir_Unidade_medida(
                                                string CTM_UNIDADE_MEDIDA_ID,
                                                string CMU_TIPO_UNIDADE,
                                                string CMU_TIPO_CALCULO,
                                                string CMU_DESCRICAO,
                                                string USU_INSERT,
                                                string DATA_INSERT,
                                                string USU_UPDATE,
                                                string DATA_UPDATE
                                                )
        {

            string sql = " INSERT INTO CTM_UNIDADE_MEDIDA " +
                         "      ( " +
                         "          CMU_TIPO_UNIDADE               , " +
                         "          CMU_TIPO_CALCULO               , " +
                         "          CMU_DESCRICAO                  , " +
                         "          USU_INSERT                     , " +
                         "          DATA_INSERT                    , " +
                         "          USU_UPDATE                     , " +
                         "          DATA_UPDATE                      " +
                 "      )" +
                 "  VALUES " +
                 "      ( " +
                              Util.retonarAspas(CMU_TIPO_UNIDADE, true) + ", " +
                              Util.retonarAspas(CMU_TIPO_CALCULO, true) + ", " +
                              Util.retonarAspas(CMU_DESCRICAO, true) + ", " +
                              Util.retonarAspas(USU_INSERT, true) + ", " +
                              Util.retonarAspas(DATA_INSERT, true) + ", " +
                              Util.retonarAspas(USU_UPDATE, true) + ", " +
                              Util.retonarAspas(DATA_UPDATE, true) +
                 "      )";
            try
            {
                fireBird._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }



        public void _atualizar_Unidade_medida(
                                                string CTM_UNIDADE_MEDIDA_ID,
                                                string CMU_TIPO_UNIDADE,
                                                string CMU_TIPO_CALCULO,
                                                string CMU_DESCRICAO,
                                                string USU_INSERT,
                                                string DATA_INSERT,
                                                string USU_UPDATE,
                                                string DATA_UPDATE
                                                )
        {

            string sql = " UPDATE CTM_UNIDADE_MEDIDA SET " +
                         "      CMU_TIPO_UNIDADE                = " + Util.retonarAspas(CMU_TIPO_UNIDADE, true) + ", " +
                         "      CMU_TIPO_CALCULO                = " + Util.retonarAspas(CMU_TIPO_CALCULO, true) + ", " +
                         "      CMU_DESCRICAO                   = " + Util.retonarAspas(CMU_DESCRICAO, true) + ", " +
                         "      USU_INSERT                      = " + Util.retonarAspas(USU_INSERT, true) + ", " +
                         "      DATA_INSERT                     = " + Util.retonarAspas(DATA_INSERT, true) + ", " +
                         "      USU_UPDATE                      = " + Util.retonarAspas(USU_UPDATE, true) + ", " +
                         "      DATA_UPDATE                     = " + Util.retonarAspas(DATA_UPDATE, true) +
                         " WHERE CTM_UNIDADE_MEDIDA_ID =  " + CTM_UNIDADE_MEDIDA_ID;
            try
            {
                fireBird._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }



        public void _excluir_Unidade_medida(string CTM_UNIDADE_MEDIDA_ID)
        {
            string sql = "DELETE FROM CTM_UNIDADE_MEDIDA WHERE CTM_UNIDADE_MEDIDA_ID = " + CTM_UNIDADE_MEDIDA_ID;
            try
            {
                fireBird._ExecutarComandoRetornandoID(sql, conectionString, false, usuario);
            }
            catch
            { }
        }

        //evento para alimetar radComboBox de Tipos de Unidade
        public List<ES_Unidade_medidaTipoUndidade> _obter_TipoUndidade()
        {
            List<ES_Unidade_medidaTipoUndidade> lista = new List<ES_Unidade_medidaTipoUndidade>();
            string formmaExecucao = "NUMERICO;CALENDARICO";
            string[] arrayFormaExecucao = formmaExecucao.Split(new char[] { ';' });

            foreach (string myString in arrayFormaExecucao)
            {
                ES_Unidade_medidaTipoUndidade item = new ES_Unidade_medidaTipoUndidade();
                item.CMU_TIPO_UNIDADE_ID = myString.Substring(0,1);
                item.CMU_TIPO_UNIDADE = myString;
                lista.Add(item);
            }
            return lista;
        }

        //evento para alimetar radComboBox de Tipos de Calculo
        public List<ES_Unidade_medidaTipoCalculo> _obter_TipoCalculo()
        {
            List<ES_Unidade_medidaTipoCalculo> lista = new List<ES_Unidade_medidaTipoCalculo>();
            string formmaExecucao = "CALCULADO POR FORMULA;SOMATORIO";
            string[] arrayFormaExecucao = formmaExecucao.Split(new char[] { ';' });

            foreach (string myString in arrayFormaExecucao)
            {
                ES_Unidade_medidaTipoCalculo item = new ES_Unidade_medidaTipoCalculo();
                item.CMU_TIPO_CALCULO_ID = myString.Substring(0, 1);
                item.CMU_TIPO_CALCULO = myString;
                lista.Add(item);
            }
            return lista;
        }

        //RETORNAR TODOS OS CONTADORES DE UM DADO EQUIPAMENTO
        public List<ES_Unidade_medida> _obter_Unidade_medidaEquipamento(string P_EQUIPAMENTO_ID)
        {

            if (string.IsNullOrEmpty(P_EQUIPAMENTO_ID))
                return new List<ES_Unidade_medida>();
            

            string sql = "SELECT DISTINCT U.CTM_UNIDADE_MEDIDA_ID, D.CMU_DESCRICAO "+
                         "FROM CTM_EQUIPAMENTO_UNIDADE U "+
                         "INNER JOIN CTM_UNIDADE_MEDIDA D ON (D.CTM_UNIDADE_MEDIDA_ID = U.CTM_UNIDADE_MEDIDA_ID) " +
                         "WHERE U.EQUIPAMENTO_ID IN (SELECT EQUIPAMENTO_ID FROM FN_EQUIPAMENTO_RETORNA_FILHOS("+P_EQUIPAMENTO_ID+", 10)) "+
                         "OR U.EQUIPAMENTO_id = "+P_EQUIPAMENTO_ID+
                         "ORDER BY D.CMU_DESCRICAO ";

            List<ES_Unidade_medida> lista = new List<ES_Unidade_medida>();
            FbConnection fbConexao = new FbConnection(conectionString);
            FbDataReader dr = fireBird.retornaDataReader(sql, conectionString, fbConexao);
            try
            {
                while (dr.Read())
                {
                    ES_Unidade_medida item = new ES_Unidade_medida();
                    item.CTM_UNIDADE_MEDIDA_ID = dr["CTM_UNIDADE_MEDIDA_ID"].ToString();
                    //item.CMU_TIPO_UNIDADE = dr["CMU_TIPO_UNIDADE"].ToString();
                    //item.CMU_TIPO_CALCULO = dr["CMU_TIPO_CALCULO"].ToString();
                    item.CMU_DESCRICAO = dr["CMU_DESCRICAO"].ToString();                    
                    lista.Add(item);

                }
                return lista;
            }
            finally
            {
                fireBird.fecharConexao(fbConexao);
            }
        }


        //método para alimetar radComboBox de Status Serviço
        public List<ES_Status_Servico> _obter_statusServico()
        {

            List<ES_Status_Servico> lista = new List<ES_Status_Servico>();
            string statusServico = "a_cumprir;já_cumprido;on_condition; opcional";
            string[] arrayStatusServico = statusServico.Split(new char[] { ';' });

            foreach (string myString in arrayStatusServico)
            {
                ES_Status_Servico item = new ES_Status_Servico();
                item.STATUS_SERVICO_ID = myString; //myString.Substring(0, 1);                
                item.STATUS_SERVICO = myString.Replace("_", " ").ToUpper();
                lista.Add(item);
            }
            return lista;
        }

        #endregion
    }
}
